package cn.mitool.core.util;

import cn.mitool.core.text.StringFormatter;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

/**
 * 字符串工具类
 *
 * @author dragon
 * @version 1.0
 * @date 2024/6/24 10:39
 */
public class StringUtil extends StringUtils {

    /**
     * 下划线
     */
    private static final char SEPARATOR = '_';

    /**
     * 星号
     */
    private static final char ASTERISK = '*';

    public static String format(String template, Object... params) {
        if (ArrayUtils.isEmpty(params) || isBlank(template)) {
            return null;
        }

        return StringFormatter.format(template, params);
    }

    /**
     * 替换指定字符串的指定区间内字符为"*"
     *
     * @param str          字符串
     * @param startInclude 开始位置（包含）
     * @param endExclude   结束位置（不包含）
     * @return 替换后的字符串
     */
    public static String hide(CharSequence str, int startInclude, int endExclude) {
        if (isEmpty(str)) {
            return EMPTY;
        }
        final int strLength = str.length();
        if (startInclude > strLength) {
            return EMPTY;
        }
        if (endExclude > strLength) {
            endExclude = strLength;
        }
        if (startInclude > endExclude) {
            // 如果起始位置大于结束位置，不替换
            return EMPTY;
        }
        final char[] chars = new char[strLength];
        for (int i = 0; i < strLength; i++) {
            if (i >= startInclude && i < endExclude) {
                chars[i] = ASTERISK;
            } else {
                chars[i] = str.charAt(i);
            }
        }
        return new String(chars);
    }

}
